# -*- coding: utf-8 -*-
import os
import torch


def abs_path(relative_path):
    """将相对路径解析为绝对规范的绝对路径"""
    current_dir = os.path.dirname(os.path.abspath(__file__))
    abs_path = os.path.join(current_dir, relative_path)
    return os.path.abspath(abs_path)

class BT_Config(object):
    def __init__(self):
        """
        配置类，包含路径参数、训练参数、模型参数等。
        """
        # 判断是否使用GPU（1.电脑里必须有显卡；2.必须安装cuda版本的pytorch）
        self.device = 'cuda' if torch.cuda.is_available() else 'cpu'

        # 原始文件
        self.train_path = abs_path("../data/train.txt")      # 训练集路径
        self.dev_path = abs_path("../data/dev.txt")          # 验证集路径
        self.test_path = abs_path("../data/test.txt")        # 测试集路径
        self.class_path = abs_path("../data/class.txt")      # 类别文件路径

        # 预处理之后的文件
        self.train_json_path = abs_path("../data/train.jsonl")
        self.dev_json_path = abs_path("../data/dev.jsonl")
        self.test_json_path = abs_path("../data/test.jsonl")

        # 数据集类别的信息
        self.class_list = [x.strip() for x in open(self.class_path).readlines()]    # 类别名单
        self.num_classes = len(self.class_list)                                     # 类别数量


        self.bert_path = abs_path("../bert_pretrain")        # 预训练模型路径
        self.save_model_dir = abs_path("../saved_model")          # 模型保存路径
        if not os.path.exists(self.save_model_dir): 
            os.mkdir(self.save_model_dir)



        # 训练相关参数
        self.epochs = 4                             # 训练轮次
        self.batch_size = 4                       # 批次大小
        self.pad_size = 35                          # 句子padding长度
        self.lr = 5e-5                              # 学习率
        self.hidden_size = 768                      # BERT隐藏层维度

        # ========== 3. 其他可扩展参数（如日志、随机种子等） ==========
        # self.seed = 42
        self.log_dir = abs_path("logs")

if __name__ == '__main__':
    config = BT_Config()
    print(config.bert_config)
    print(config.device)
    print(config.train_pkl_path) 
    print(config.train_path)
